library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity INDATA is
	Port ( a : in STD_LOGIC_VECTOR (15 downto 0);
		ain : in STD_LOGIC;
		clkin : in STD_LOGIC;
		aack : in STD_LOGIC;
		astr : out STD_LOGIC;
		aout : out STD_LOGIC_VECTOR (15 downto 0));
end INDATA;

architecture Behavioral of INDATA is
	type estados is(inicio, envio);
	begin
	dados: process(clkin, ain, aack)
		variable estado: estados := inicio;
		variable ad: STD_LOGIC_VECTOR(15 downto 0);
	begin
		if clkin'event and clkin = '1' then
			astr <= '0';
			aout <= "ZZZZZZZZZZZZZZZZ";
			case estado is
			when inicio =>
				if ain = '1' then
					ad := a;
					estado := envio;
				end if;
			when envio =>
				if aack = '1' then
					estado := inicio;
				else
					APÊNDICE A. IMPLEMENTAÇÃO DE GRAFOS A FLUXO DE DADOS 107
					astr <= '1';
					aout <= ad;
				end if;
			end case;
		end if;
	end process dados;
end Behavioral;